PreparedStatement হল JDBC (Java Database Connectivity) API-র একটি ক্লাস যা SQL ইনজেকশন থেকে রক্ষা পাওয়ার জন্য এবং ডেটাবেসে ডাইনামিক কুয়েরি এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি Statement ইন্টারফেসের একটি উন্নত সংস্করণ, যা SQL কুয়েরি তৈরি এবং এক্সিকিউট করার জন্য ব্যবহৃত হয়। PreparedStatement ব্যবহারের মাধ্যমে SQL কুয়েরি গুলি পুনঃব্যবহারযোগ্য এবং নিরাপদ হয়।
উদাহরণ: PreparedStatement ব্যবহার করে একটি SQL কুয়েরি এক্সিকিউট করা
এই উদাহরণে, আমরা একটি ডাটাবেসে কনেকশন স্থাপন করব, একটি PreparedStatement ব্যবহার করে ডাটাবেসে একটি ইনসার্ট কুয়েরি এক্সিকিউট করব।
ধাপ ১: MySQL ডাটাবেসে কনফিগারেশন তৈরি
প্রথমে, নিশ্চিত হন যে আপনার ডাটাবেস এবং টেবিল প্রস্তুত আছে। ধরুন আমরা একটি Employee টেবিল ব্যবহার করব, যার মধ্যে তিনটি কলাম আছে: id, name, এবং salary।
CREATE TABLE Employee (
id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2)
);
ধাপ ২: Java কোড উদাহরণ
এখন, নিচের জাভা কোডটি দেখুন যা PreparedStatement ব্যবহার করে ডাটাবেসে ডাটা ইনসার্ট করবে।
import java.sql.*;
public class PreparedStatementExample {
public static void main(String[] args) {
// ডাটাবেস কনফিগারেশন
String url = "jdbc:mysql://localhost:3306/your_database_name"; // আপনার ডাটাবেস URL
String user = "root"; // ডাটাবেস ইউজার
String password = "password"; // ডাটাবেস পাসওয়ার্ড
// SQL কুয়েরি
String sql = "INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)";
// কনেকশন এবং PreparedStatement ডিক্লেয়ারেশন
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
// প্রথম প্রিপেয়ারড স্টেটমেন্টের জন্য প্যারামিটার সেট করা
pstmt.setInt(1, 101); // id
pstmt.setString(2, "John Doe"); // name
pstmt.setBigDecimal(3, new BigDecimal("50000.00")); // salary
// ইনসার্ট কুয়েরি এক্সিকিউট করা
int rowsAffected = pstmt.executeUpdate();
System.out.println("Rows affected: " + rowsAffected);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- ডাটাবেস কনফিগারেশন:
url: ডাটাবেসের URL, যেখানেlocalhost:3306হলো MySQL সার্ভারের লোকাল হোস্ট এবংyour_database_nameহলো আপনার ডাটাবেসের নাম।userএবংpassword: আপনার ডাটাবেসের ইউজারনেম এবং পাসওয়ার্ড।
- SQL কুয়েরি:
"INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)": এখানে?হল প্লেসহোল্ডার যা পরবর্তীতে ডাইনামিকভাবে পূর্ণ করা হবে।
- PreparedStatement:
conn.prepareStatement(sql)-এsqlপ্যারামিটার হিসেবে কুয়েরি পাঠানো হয়।pstmt.setInt(1, 101)- প্রথম?প্লেসহোল্ডারকে ইনপুট দেওয়া হচ্ছে। এখানে1হল প্লেসহোল্ডারের অবস্থান (প্রথমটি, দ্বিতীয়টি, তৃতীয়টি ইত্যাদি) এবং101হলো তার মান (id)।pstmt.setString(2, "John Doe")- দ্বিতীয় প্লেসহোল্ডারnameপূর্ণ করা হচ্ছে।pstmt.setBigDecimal(3, new BigDecimal("50000.00"))- তৃতীয় প্লেসহোল্ডারsalaryপূর্ণ করা হচ্ছে।
- Query Execution:
pstmt.executeUpdate()মেথডটি SQL কুয়েরি এক্সিকিউট করে এবং যে সংখ্যক সারি প্রভাবিত হয়েছে তা ফিরিয়ে দেয়।
- Exception Handling:
SQLExceptionহ্যান্ডলিংয়ের মাধ্যমে ডাটাবেস সম্পর্কিত যে কোনো সমস্যা ধরতে পারেন।
Advantages of PreparedStatement:
- SQL Injection Protection: SQL ইনজেকশন আক্রমণের হাত থেকে রক্ষা করে, কারণ ব্যবহারকারীর ইনপুট কুয়েরিতে সরাসরি যুক্ত করা হয় না।
- Performance: একটি কুয়েরি একবার কম্পাইল হয়ে গেলে, পরবর্তী এক্সিকিউশনের জন্য এটি পুনঃব্যবহার করা যেতে পারে, ফলে কর্মক্ষমতা বৃদ্ধি পায়।
- Code Readability: ডাইনামিকভাবে প্যারামিটার যুক্ত করা সহজ হয়, ফলে কোড আরও পরিষ্কার এবং রক্ষণাবেক্ষণ সহজ হয়।
এই উদাহরণটি দেখায় কিভাবে PreparedStatement ব্যবহার করে ডাটাবেসে ডাটা ইনসার্ট করা যায়। PreparedStatement হল JDBC API-র একটি শক্তিশালী এবং নিরাপদ উপায় যা SQL কুয়েরি এক্সিকিউশনের জন্য ব্যবহৃত হয়।
Read more